package exception

// 此文件用于自定义异常的结构体
import (
	"fmt"
	"net/http"
)

// 自定义异常结构体
type Exception struct {
	// 自定义的业务code
	BizCode int    `json:"code"`
	Message string `json:"message"`
	// 异常时，返回的数据；如果没有数据返回，可以不定义此属性
	Data any `json:"data"`
	// http code
	HttpCode int `json:"http_code"`
}

// a ...any 表示可变参数，允许你向函数传递零个或多个指定类型的参数
func NewException(code int, format string, a ...any) *Exception {
	HttpCode := http.StatusInternalServerError
	// code在(0,500)区间时
	if code/100 < 6 && code/100 > 0 {
		HttpCode = code
	}

	return &Exception{
		BizCode:  code,
		Message:  fmt.Sprintf(format, a...),
		HttpCode: HttpCode,
	}
}

// 实现error接口
func (e *Exception) Error() string {
	return e.Message
}
